package com.team.RunsFast_Api.controller;


import com.team.RunsFast_Api.dto.PayDto;
import com.team.RunsFast_Api.dto.PayRefoundDto;
import com.team.RunsFast_Api.service.intf.OrderPayService;
import com.team.RunsFast_Api.util.AliPayUtil;
import com.team.runsfast.vo.R;
import io.swagger.annotations.Api;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * ━━━━━━神兽出没━━━━━━
 * 　　　┏┓　　　┏┓
 * 　　┏┛┻━━━┛┻┓
 * 　　┃　　　　　　 ┃
 * 　　┃　　　━　　　┃
 * 　　┃　┳┛　┗┳　  ┃
 * 　　┃　　　　　　 ┃
 * 　　┃　　　┻　　　┃
 * 　　┃　　　　　　　┃
 * 　　┗━┓　　　┏━┛Code is far away from bug with the animal protecting
 * 　　　　┃　　　┃    神兽保佑,代码无bug
 * 　　　　┃　　　┃
 * 　　　　┃　　　┗━━━┓
 * 　　　　┃　　　　　　　┣┓
 * 　　　　┃　　　　　　　┏┛
 * 　　　　┗┓┓┏━┳┓┏┛
 * 　　　　　┃┫┫　┃┫┫
 * 　　　　　┗┻┛　┗┻┛
 * ━━━━━━永无BUG!━━━━━━
 *
 * @Description:
 * @Author: 邢朋辉
 * @Date: 2022/9/26 10:15
 */
@Controller
@RequestMapping("/api/alipay/")
@CrossOrigin
@Api(tags = "支付宝支付")
public class AliPayController {
    private Logger logger = LoggerFactory.getLogger(AliPayController.class);

    @Resource
    private OrderPayService service;


    //发起支付
    @PostMapping("sendpay.do")
    @ResponseBody
    public R sendPay(@RequestBody PayDto payDto) {
        String res = AliPayUtil.createPayPC(payDto.getNo(), payDto.getMoney(), payDto.getTitle());
        if (StringUtils.hasLength(res)) {
            //创建支付成功
            service.save(payDto);
            return R.ok(res);
        } else {
            return R.fail();
        }
    }

    //查询支付状态
    @GetMapping("querypay.do")
    @ResponseBody
    public R queryPay(String no){
        return R.ok(AliPayUtil.queryPay(no));
    }
    @GetMapping("all.do")
    @ResponseBody
    public R all(){
        return service.all();
    }
    @PostMapping("refoundpay.do")
    @ResponseBody
    public R refoundPay(@RequestBody PayRefoundDto dto){
        boolean res= AliPayUtil.refoundPay(dto.getNo(),dto.getMoney());
        if(res){
            //创建退款成功
            return R.ok();
        }else {
            return R.fail();
        }
    }
    //支付宝回调地址,用户支付完成之后，支付宝会调用这个接口
    @PostMapping("callback.do")
    public void callback(HttpServletRequest request, HttpServletResponse response) throws IOException {
        //省略了 接口验证签名

        //1.接收请求
        String no=request.getParameter("out_trade_no");
        String status=request.getParameter("trade_status");
        logger.info("支付宝回调成功：订单号："+no+",状态："+status);
        //2.更新数据库
        service.updateStatus(no,status);
        //3.返回
        response.setContentType("text/html");
        response.getWriter().println("success");
    }


}

